package com.project.mapper;

import com.github.pagehelper.PageInfo;
import com.project.bean.StaffBean;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;

public interface IStaffMapper {
    /**
     * 根据条件模糊动态分页查询员工
     * 默认状态下查询全部员工
     * @param name 员工名称
     * @param expertise 专长
     * @param state 状态
     * @param sort 排序规则（可以判断null）
     * @return 分页对象
     */
    public List<StaffBean> findByItem(@Param("name") String name,
                                      @Param("exp") String expertise,
                                         @Param("state") String state,
                                      @Param("sort") String sort);
    /**
     * 根据条件模糊动态查询不在指定项目的员工信息集合。
     * 项目编号为固定条件，员工姓名和专长为动态条件
     * @param name 员工姓名
     * @param expertise 专长
     * @return 员工集合
     */
    public List<StaffBean> findByNoItem(@Param("name") String name,@Param("expertise") String expertise,
                                     @Param("projId") Integer projId);

    /**
     * 添加员工
     * @param staffBean 员工对象（包含姓名、电话、专长、工资、生日、头像）
     */
    @Insert("insert into t_staff(s_name,s_birthday,s_inDate,s_expertise," +
            "s_state,s_salary,s_image,s_phone)" +
            "values(#{name},#{birthday},#{inDate},#{expertise},#{state}," +
            "#{salary},#{image},#{phone})")
    public void add(StaffBean staffBean);

    /**
     * 员工离职，将员工的状态修改为离职。
     * 并将他正在进行的项目，完成时间修改为当前时间
     * @param id 员工id
     */
    public void updateState(@Param("id") Integer id, @Param("nowDate") LocalDate nowDate);

    /**
     * 先根据id查询该用户，用户存在修改用户的电话和工资
     * @param id 用户id
     * @param phone 电话
     * @param salary 工资
     */
    public void update(@Param("id") Integer id,
                       @Param("phone") String phone,
                       @Param("salary") Integer salary);

    /**
     * 根据id查询用户，同时查询该员工参与的所有项目的名称
     * 根据员工外键查询进度表
     * @param id 员工id
     * @return 员工信息和参与项目的名称 //参与时间和完成项目时间（进度表）
     */
    public StaffBean findByIdProject(Integer id);

    /**
     * 根据id查询用户详情
     * @param id 员工id
     * @return 员工信息
     */
    @Select("select * from t_staff where pk_staffId = #{id}")
    @ResultMap("staffMap")
    public StaffBean findById(Integer id);

}
